package com.example.e11_q3;

/**
 * @desc:
 * @author: Shoko
 * @date: 2025/6/13
 */
import java.util.HashMap;
import java.util.Map;

public class HRDepartmentVisitor implements EmployeeVisitor {
    // 按部门统计实际工作时长
    private Map<String, Integer> deptWorkHours = new HashMap<>();
    // 按部门统计正式员工加班/请假时长
    private Map<String, Integer> deptLeaveHours = new HashMap<>();

    @Override
    public void visit(RegularEmployee employee) {
        String dept = employee.getDepartment();
        // 累加部门工作时长
        deptWorkHours.put(dept, deptWorkHours.getOrDefault(dept, 0) + employee.getActualHours());
        // 记录请假/加班时长（+表示请假，-表示加班）
        deptLeaveHours.put(dept, deptLeaveHours.getOrDefault(dept, 0) + employee.getLeaveHours());
    }

    @Override
    public void visit(TemporaryEmployee employee) {
        String dept = employee.getDepartment();
        // 累加部门工作时长
        deptWorkHours.put(dept, deptWorkHours.getOrDefault(dept, 0) + employee.getActualHours());
    }

    // 输出人力资源部统计结果
    public void showReport() {
        System.out.println("=== 人力资源部统计报告 ===");
        deptWorkHours.forEach((dept, hours) -> {
            System.out.println("部门 [" + dept + "] 总工作时长: " + hours + " 小时");
            // 仅正式员工有请假/加班数据
            System.out.println("   正式员工总请假/加班时长: " + deptLeaveHours.getOrDefault(dept, 0) + " 小时");
        });
    }
}
